package chenlong.matrixtestdemo;

import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Camera;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    private MyImageView imageView;
    private Matrix matrix = new Matrix();
    private Camera camera = new Camera();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (MyImageView) findViewById(R.id.imageView);
        final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.a);
        final float px = bitmap.getWidth();
        final float py = bitmap.getHeight();
        final float dx = bitmap.getWidth() / 2;
        final float dy = bitmap.getHeight() / 2;
        imageView.setImageBitmap(bitmap);
        imageView.setImageMatrix(matrix);
        findViewById(R.id.btn_turn).setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onClick(View v) {

//                Android设备平整的放在桌面上，X轴是手机的水平方向，Y轴是手机的竖直方向，Z轴是垂直于手机向里的那个方向。下面是一些细节：

                camera.save();
//                水平方向上的翻转
                camera.rotateX(5);
                camera.getMatrix(matrix);
//                因为camera是从（0，0）点开始处理 所以要先将矩阵想要翻转的地方移动到camera的位置然后在移动回来
                matrix.preTranslate(-dx, -py);
//                其实是可以理解为将camera移动到想要翻转的点的位置（只是相机不提供相关方法 只能移动矩阵）
                matrix.postTranslate(dx, py);
//                相机还原
                camera.restore();


                //因为在倾斜之后 要有一个图片原理的效果 因此需要从图片中心点设置相机原理物体
                Matrix matrixtemp=new Matrix();
                camera.save();
                //意思是把观察物体右移x，上移y，向前移z（即让物体远离camera，这样物体将会变小）
                camera.translate(0,0,40);
                camera.getMatrix(matrixtemp);
                matrixtemp.preTranslate(-dx, -dy);
                matrixtemp.postTranslate(dx, dy);
                camera.restore();


                //完成之后将两次变换进行合并操作
                matrix.postConcat(matrixtemp);

                imageView.setImageMatrix(matrix);

            }
        });
        findViewById(R.id.btn_reset).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                matrix.reset();
                imageView.setImageMatrix(matrix);
            }
        });
    }
}
